【python绘图】matplotlib基本使用(含实例)

您所在的位置:网站首页 python 数据绘图 【python绘图】matplotlib基本使用(含实例)

【python绘图】matplotlib基本使用(含实例)

2024-06-10 08:45| 来源: 网络整理| 查看: 265

目录 前言导入库库配置设置中文字体为宋体,英文字体为Times New Roman plt 绘图类型1.折线图2.散点图3.柱状图4.直方图4.饼图5.箱状图 pyplot绘图基本操作1.添加信息2.显示刻度3.显示图例4.显示图像5.样式设置 画板-Figure图纸-Axes坐标轴-Axis样式-Artist保存实例例: f ( x ) = x 2 s i n 1 x f(x) = x^2sin\frac{1}{x} f(x)=x2sinx1​

前言

matplotlib是python的绘图库,主要用来绘制二维平面图。上手容易、简单,在python数据分析中有非常重要的作用。 基本上有两种使用 Matplotlib 的方法: 一、依靠 pyplot 自动创建和管理图形和轴,并使用 pyplot 函数进行绘图。 二、显式创建图形和轴,并在它们上调用方法(即“面向对象 (OO) 样式”)。

本文章节“plt绘图类型”和“pyplot绘图”主要使用第一种方法(直接调用函数的方法)来介绍基础的功能。虽然用第一种调用函数的方法写起来快,但是使用第二种方式功能会更全。我个人一把在用jupyter做数据分析时使用函数的方法直接调用;在做python桌面程序的时候用到matplotlib时会使用第二种方法。

一下为matplotlib官方教程和api文档,强烈建议看完本文章去拿官方的例子练手。 matplotlib官方例子 matplotlib api文档

导入库 import matplotlib.pyplot as plt 库配置

matplotlib有些默认配置不能显示中文,而且格式不符合论文规范,需要设置一下

# 设置字体为宋体 plt.rcParams['font.family'] = ['serif'] # 设置字体为有衬线字体(宋体是有衬线字体之一) plt.rcParams['font.serif'] = ['SimSun'] # 设置有衬线字体为宋体 ## 下面的是设置字体为黑体 # plt.rcParams['font.family'] = ['sans-serif'] # 设置字体为无衬线字体(黑体是无衬线字体之一) # plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置无衬线字体为黑体 # 设置公式格式 plt.rcParams['mathtext.fontset'] = 'stix' # 正常显示负号 plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.size']=18 #设 置字体字号 plt.rcParams['xtick.labelsize']=16 # 设置横坐标轴字体字号 plt.rcParams['ytick.labelsize']=16 # 设置纵坐标轴字体字号 # 设置刻度朝里,我喜欢朝里,默认的朝外感觉有点丑 plt.tick_params(which="major",direction='in',length=5,bottom=True,left=True)

还有很多配置可以去看官方文档。

设置中文字体为宋体,英文字体为Times New Roman

基本原理就是使用一种融合宋体和TimesNewRoman的新字体。字体融合步骤我是参考简书的一篇文章,可以直接使用融合好的字体:字体下载链接下载后安装之后。修改matplotlib配置就行。

第一步:下载安装SunTimes.ttf 字体下载 第二步:双击字体安装 第三步:修改matplotlib配置: plt.rcParams['font.family'] = ['serif'] plt.rcParams['font.serif'] = ['SunTimes']

plt 绘图类型

matplotlib.pyplot是使 matplotlib 像 MATLAB 一样工作的函数集合。调用简单

1.折线图 plt.plot(X,Y) 2.散点图 plt.scatter(X,Y) 3.柱状图 plt.bar(X,Y) 4.直方图

直方图是对数据进行频率/频数统计,和柱状图类似,但是不一样

plt.hist(array) # array是一维数据

默认绘制的是频数直方图,如果想要绘制频率直方图,需要下面的代码

# 频率直方图 plt.hist(data,bins=10,density=False, weights=weights) # density不要设置为True,有问题 4.饼图 plt.pie(data,lables=,autopct='%1.1f%%')

说明: 1.1f指的是保留1位小数,后面两个%表示已百分号显示

5.箱状图 plt.boxplot(X,Y)

补充一下箱线图一些说明 箱线图表示 图来源于:https://www.imooc.com/video/20316 7:03

pyplot绘图基本操作 1.添加信息 plt.xlabel() # 设置 x 轴标签 plt.ylabel() # 设置 y 轴标签 plt.title() # 设置标题 2.显示刻度 plt.xticks() 3.显示图例 plt.legend() 4.显示图像 plt.show() 5.样式设置 # 设置线条宽度 plt.rcParams['lines.linewidth']=1 # 设置线条颜色 plt.rcParams['lines.color']='green' # 设置线条样式 plt.rcParams['lines.linestytle']='-'

以下重点介绍面向对象绘图方法。此方法可以绘制更加复杂的图片。

画板-Figure

前面介绍的只是比较基本的,适用于快速出图。但是我们做数据分析,想的是同时出多张图,所以需要使用figure()来生成一个画板。

fig = plt.figure(figsize=None, dpi=None)

画板添加大标题

fig.suptitle("画板标题") 图纸-Axes

在画板里还需要有“图纸”来绘画。也可以理解为坐标系,注意跟下面的Axis(坐标轴)要正确区分

快速创建图板和一个子图:

fig, ax = plt.subplots(**fig_kw) # 快速创建子图和图板,可以传入figure对象的参数,如figsize() ax.plot(......) # 子图上绘画

matplot图的组成部分: 在这里插入图片描述

# 添加子图: ax = fig.add_subplot(参数1,参数2,参数3)

参数1 和参数2是用来对画板划分;参数3指的是 ax 指的是第几部分

例子:ax = fig.add_subplot(2,2,1) # 将画板划分为2*2,ax表示的第一个

# 为子图添加标题: ax.set_title("标题") # 添加图例 #可以添加参数 ax.legend() # 要显示图例画的线的名称,需要在ax.plot()中添加参数:label # 在指定位置添加文本 ax.text(x,y,"str")# x,y的位置是根据坐标轴的数来的,可以通过transform参数更改坐标系 # 网格是否显示 ax.grid(True);# 显示

matplotlib默认支持TeX表达式(可以输入公式)

matplotlib还支持使用注解(annotions)

ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),arrowprops=dict(facecolor='black', shrink=0.05)) 坐标轴-Axis #添加坐标轴标签: ax.set_xlabel("x标签") ax.set_ylabel("y标签") # 改变坐标尺度 ax.set_yscale('log') # 使用log尺度 # 改变坐标点(ticks)值 ax.set_xticks([0,30,60,90], ['zero', 'thirty', 'sixty', 'ninety'])# 第一个参数是坐标,第二个参数是坐标标签.第二个参数可以不用加。

如果想在子图上新添加坐标轴,可以使用ax. twinx()或者ax. twiny()或者ax.secondary_xaxis。其实就是在原子图的基础上又添加了一个子图,不过子图默认只显示坐标轴。这个新添加的子图也可以添加图形,设置图例、标题、刻度等等。

样式-Artist

matplotlib绘图绘制图往往需要根据需求设置图形的样式。

颜色:

# 设置折线的颜色 ax.plot(x, y, color='orange', linewidth=2) # 设置散点图圆点的轮廓颜色和填充颜色 ax.scatter(x, y s=50, facecolor='C0', edgecolor='k');# s表示圆点大小;facecolor表示填充大小;edgecolor表示边缘大小

线宽: 线宽的单位是pt

ax.plot(x, y, linewidth=6)

点形状

ax.plot(x, y, marker="^")

线形状

ax.plot(x, y, linestyle="--")

matplotlib提供一个格式化字符串,可以对点形状、线形状、颜色:marker

fig,ax=plt.subplots(figsize=(10,7)) ax.plot(x, y,"^--r")

在这里插入图片描述

保存

绘制好图片不会保存怎么能行?下面是一些保存图片的代码

以位图格式保存(常用): fig, axes = plt.subplots(1, 3, figsize=(12, 20)) # ... 省略绘图步骤 fig.savefig('output.png',format='png') 以矢量格式保存(强烈建议!矢量格式可以拖到illustrator里二次修改): fig, axes = plt.subplots(1, 3, figsize=(12, 20)) # ... 省略绘图步骤 plt.rcParams['pdf.fonttype'] = 42 # 字号可以修改,设置字号后,保存成pdf会自动将文件以字体的形式输出;也可以不加这个设置,但是字体会变成轮廓,影响后面用illustrator修改字体格式 fig.savefig('output.pdf',format='pdf') 实例 例: f ( x ) = x 2 s i n 1 x f(x) = x^2sin\frac{1}{x} f(x)=x2sinx1​

我用的工具是jupyter notebook

import numpy as np import math # 在-0.4和0.4之间划分10000个等分。 x=np.linspace(-0.4,0.4,10000,endpoint=False) # 范围我取的很小是因为在(-0.5,0.5)之外,函数图像就是一个直线,没必要。范围太大你看上去就跟直线似的。可以自己试试。 y=[] for i in x: if i==0: y.append(0) # 这里要注意分母不能为0,要不然会报 domain 错误; # 这里我直接让y等于0,因为高数都学过极限:趋近于零时,无穷小乘以有界,为0, else: y.append(math.pow(i,2) * math.sin(1/i)) plt.plot(x,y) # 输入x,y坐标 plt.title("f(x) = x^2sin(1/x) ") # 设置标题 plt.show() # 绘画

matplotlib输出的图形如下: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3